package core;
/**
 * Egy telket megvalósító osztály.
 * 
 * @author Szabolcs
 *
 */
public class Property implements Item {
	private int price;
	private String name;
	private Player owner;
	private int group;
	private int nrItems;

	private int nrHouses = 0;
	private int priceOfHouse;
	private int[] rentalPrice = new int[6];

	/**
	 * Inicializálás
	 * @param n név
	 * @param p ár
	 * @param g csoport
	 * @param nr csoport létszáma
	 * @param pH egy ház ára
	 * @param r0 bérleti díj ház nélkül
	 * @param r1 bérleti díj 1 házzal
	 * @param r2 bérleti díj 2 házzal
	 * @param r3 bérleti díj 3 házzal
	 * @param r4 bérleti díj 4 házzal
	 * @param r5 bérleti díj hotellel
	 */
	public Property(String n, int p, int g, int nr, int pH, int r0, int r1,
			int r2, int r3, int r4, int r5) {
		name = new String(n);
		price = p;
		group = g;
		owner = null;
		nrItems = nr;
		priceOfHouse = pH;
		rentalPrice[0] = r0;
		rentalPrice[1] = r1;
		rentalPrice[2] = r2;
		rentalPrice[3] = r3;
		rentalPrice[4] = r4;
		rentalPrice[5] = r5;
	}

	/**
	 * Eladás.
	 * @param p kinek
	 * 
	 * @return téríti, hogy sikeres volt-e a művelet.
	 */
	public boolean sell(Player p) {
		if (owner == null) {
			owner = p;
			return true;
		} else
			return false;
	}

	/**
	 * 
	 * @return el van-e adva
	 */
	public boolean sold() {
		return owner != null;
	}


	public int getPrice() {
		return price;
	}

	public String getName() {
		return name;
	}

	public int getGroup() {
		return group;
	}

	public Player getOwner() {
		return owner;
	}

	public boolean hasPrice() {
		return true;
	}

	public int getNrOfItemsInGroup() {
		return nrItems;
	}

	public int getRentalPrice(int thrownValue, int nr) {
		return rentalPrice[nrHouses];
	}

	/**
	 * Ház hozzáadása.
	 * @return téríti, hogy sikeres volt-e a művelet.
	 */
	public boolean addHouse() {
		if (nrHouses == 5)
			return false;
		nrHouses++;
		return true;
	}
	
	/**
	 * 
	 * @return téríti a ház vételárát
	 */
	public int getPriceOfHouse() {
		return priceOfHouse;
	}

	public boolean action(Player p) {
		return p.pay(this.getRentalPrice(p.getThrownValue(),
				owner.getNrOfItemsOwnedFromGroup(this.getGroup())));
	}

	public boolean hasGroup() {
		return true;
	}
}
